/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package sv.com.intesal.proyecto.managed;

import java.io.Serializable;
import java.util.List;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.ViewScoped;
import sv.com.intesal.clases.LimpiarManaged;
import sv.com.intesal.clases.Mensaje;
import sv.com.intesal.proyecto.bean.DevolucionProyecto;
import sv.com.intesal.proyecto.bean.Proyecto;
import sv.com.intesal.proyecto.controlador.DevolucionProyectoControlador;
import sv.com.intesal.seguridad.managed.SessionManaged;

/**
 *
 * @author root
 */
@ManagedBean(name = "consultaDevolucionProyectoManaged")
@ViewScoped
public class ConsultaDevolucionProyectoManaged implements Serializable {

    private Mensaje m;
    private SessionManaged sm;
    private Boolean flagStep_1;
    private Boolean flagStep_2;

    /*ENCA*/
    private DevolucionProyecto selectedEncaDevolucionProyecto;
    private List<DevolucionProyecto> encaDevolucionProyectos;

    /*DETA*/
    private DevolucionProyecto selectedDetaDevolucionProyecto;
    private List<DevolucionProyecto> detaDevolucionProyectos;
    /*PROYECTO*/
    private Proyecto selectedProyecto;

    public ConsultaDevolucionProyectoManaged() {
        m = new Mensaje();
        sm = new SessionManaged();
        this.flagStep_1 = true;
        this.flagStep_2 = false;

        this.selectedEncaDevolucionProyecto = new DevolucionProyecto();
        this.selectedDetaDevolucionProyecto = new DevolucionProyecto();
        this.selectedProyecto = new Proyecto();
    }

    public void buscarGrid() {
        try {

            if (sm.validar_rol_usuario("wfrmcon_DevolucionProyecto", sm.buscar) == true) {

                //this.selectedEncaDevolucionProyecto.setId_cl(this.selectedProyecto.getId_c());
                this.selectedEncaDevolucionProyecto.setId_p(this.selectedProyecto.getId_p());
                DevolucionProyectoControlador dp = new DevolucionProyectoControlador();
                this.encaDevolucionProyectos = dp.getConsulta_DevolucionProyecto(selectedEncaDevolucionProyecto);
            }

        } catch (Exception e) {
            m.messageError(m.getIerror());
            e.printStackTrace();
        }
    }

    public void anularDevolucionProyecto() {
        try {
            if (this.validar_anular() == true) {
                if (sm.validar_rol_usuario("wfrmcon_DevolucionProyecto", sm.anular) == true) {
                    DevolucionProyectoControlador dp = new DevolucionProyectoControlador();
                    if (dp.validarCantidad_AnularDevolucionProyecto(this.selectedDetaDevolucionProyecto.getId_dp()) == true) {
                        dp.anularDevolucionProyecto(this.detaDevolucionProyectos);
                        LimpiarManaged.limpiar();
                    }
                }
            }
        } catch (Exception e) {
            e.printStackTrace();
            m.messageError(m.getIerror());
        }
    }

    public void modificarDevolucionProyecto() {

        try {
            if (this.validar_modificar() == true) {
                if (sm.validar_rol_usuario("wfrmcon_DevolucionProyecto", sm.modificar) == true) {
                    DevolucionProyectoControlador dp = new DevolucionProyectoControlador();
                    dp.modificarDevolucionProyecto(this.selectedDetaDevolucionProyecto);
                }
            }
        } catch (Exception e) {
            e.printStackTrace();
            m.messageError(m.getIerror());
        }
    }

    private Boolean validar_modificar() throws Exception {
        try {
            Boolean var_return = true;

            if (this.selectedDetaDevolucionProyecto.getEstado_dp().equals("P")) {
                m.messageError("PENDIENTE MODFICIAR");
                var_return = false;
            } else if (this.selectedDetaDevolucionProyecto.getEstado_dp().equals("A")) {
                m.messageError("NO PUEDE MODFICIAR EL REGISTRO. EL REGISTRO YA ESTA ANULADO!");
                var_return = false;
            }
            if (this.selectedDetaDevolucionProyecto.getId_dp() == null) {
                m.messageFatal("DEBE ELEGIR UN REGISTRO A MODIFICAR. NO TIENE CODIGO ASIGNADO. ERROR");
                var_return = false;
            }
            return var_return;
        } catch (Exception e) {
            throw new Exception(e);
        }
    }

    private Boolean validar_anular() throws Exception {
        try {
            Boolean var_return = true;

            if (this.selectedDetaDevolucionProyecto.getEstado_dp().equals("P")) {
                m.messageError("PENDIENTE MODFICIAR");
                var_return = false;
            } else if (this.selectedDetaDevolucionProyecto.getEstado_dp().equals("A")) {
                m.messageError("NO PUEDE ANULAR EL REGISTRO. EL REGISTRO YA ESTA ANULADO!");
                var_return = false;
            }
            if (this.selectedDetaDevolucionProyecto.getId_dp() == null) {
                m.messageFatal("DEBE ELEGIR UN REGISTRO A ANULAR. NO TIENE CODIGO ASIGNADO. ERROR");
                var_return = false;
            }
            if (this.detaDevolucionProyectos.size() == 0) {
                m.messageFatal("NO HAY MATERIALES PARA ANULAR EL REGISTRO");
                var_return = false;
            }
            return var_return;
        } catch (Exception e) {
            throw new Exception(e);
        }
    }

    public void ocultarFlag_1() {
        try {

            if (this.selectedDetaDevolucionProyecto == null) {
                m.messageError("DEBE ELEGIR UN REGISTRO PARA CONTINUAR");
            } else if (this.selectedDetaDevolucionProyecto != null) {
                this.flagStep_1 = false;
                this.flagStep_2 = true;

                DevolucionProyectoControlador dp = new DevolucionProyectoControlador();
                this.detaDevolucionProyectos = dp.getDetaDevolucionProyecto(this.selectedDetaDevolucionProyecto.getId_dp());
            }

        } catch (Exception e) {
            e.printStackTrace();
            m.messageError(m.getIerror());
        }
    }

    public void ocultarFlag_2() {
        try {
            this.flagStep_1 = true;
            this.flagStep_2 = false;
        } catch (Exception e) {
            e.printStackTrace();
            m.messageError(m.getIerror());
        }
    }

    public void getProyecto_Quick(Proyecto p) {
        try {
            this.selectedProyecto = p;
        } catch (Exception e) {
            e.printStackTrace();
            m.messageError(m.getIerror());
        }
    }

    public void generarReporte_Enca() {
        try {
            if (this.encaDevolucionProyectos == null) {
                m.messageError("NO HAY REGISTROS EN LA BUSQUEDA");
            } else {
                if (sm.validar_rol_usuario("wfrmcon_DevolucionProyecto", sm.reporte) == true) {
                    System.out.println("1.1");
                    this.selectedEncaDevolucionProyecto.setId_p(this.selectedProyecto.getId_p());
                    DevolucionProyectoControlador dp = new DevolucionProyectoControlador();
                    dp.generarReporte_Enca(this.selectedEncaDevolucionProyecto);
                }
            }
        } catch (Exception e) {
            e.printStackTrace();
            m.messageError(m.getIerror());
        }
    }

    public void generarReporte_Deta() {
        try {
            if (this.detaDevolucionProyectos.size() <= 0) {
                m.messageError("NO HAY MATERIALES PARA GENERAR REPORTE DEL DETALLE");
            } else if (this.selectedDetaDevolucionProyecto != null) {
                if (sm.validar_rol_usuario("wfrmcon_DevolucionProyecto", sm.reporte) == true) {
                    DevolucionProyectoControlador dp = new DevolucionProyectoControlador();
                    dp.generarReporte_Detalle(this.selectedDetaDevolucionProyecto);
                }
            }
        } catch (Exception e) {
            e.printStackTrace();
            m.messageError(m.getIerror());
        }
    }

    /* SETTERS   GETTERS  */
    public List<DevolucionProyecto> getEncaDevolucionProyectos() {
        return encaDevolucionProyectos;
    }

    public void setEncaDevolucionProyectos(List<DevolucionProyecto> encaDevolucionProyectos) {
        this.encaDevolucionProyectos = encaDevolucionProyectos;
    }

    public Proyecto getSelectedProyecto() {
        if (this.selectedProyecto == null) {
            this.selectedProyecto = new Proyecto();
        }
        return selectedProyecto;
    }

    public void setSelectedProyecto(Proyecto selectedProyecto) {
        this.selectedProyecto = selectedProyecto;
    }

    public Boolean getFlagStep_1() {
        return flagStep_1;
    }

    public Boolean getFlagStep_2() {
        return flagStep_2;
    }

    public void setFlagStep_1(Boolean flagStep_1) {
        this.flagStep_1 = flagStep_1;
    }

    public void setFlagStep_2(Boolean flagStep_2) {
        this.flagStep_2 = flagStep_2;
    }

    public DevolucionProyecto getSelectedEncaDevolucionProyecto() {
        if (selectedEncaDevolucionProyecto == null) {
            selectedEncaDevolucionProyecto = new DevolucionProyecto();
        }
        return selectedEncaDevolucionProyecto;
    }

    public void setSelectedEncaDevolucionProyecto(DevolucionProyecto selectedEncaDevolucionProyecto) {
        this.selectedEncaDevolucionProyecto = selectedEncaDevolucionProyecto;
    }

    public List<DevolucionProyecto> getDetaDevolucionProyectos() {
        return detaDevolucionProyectos;
    }

    public void setDetaDevolucionProyectos(List<DevolucionProyecto> detaDevolucionProyectos) {
        this.detaDevolucionProyectos = detaDevolucionProyectos;
    }

    public DevolucionProyecto getSelectedDetaDevolucionProyecto() {
        if (selectedDetaDevolucionProyecto == null) {
            this.selectedDetaDevolucionProyecto = new DevolucionProyecto();
        }
        return selectedDetaDevolucionProyecto;
    }

    public void setSelectedDetaDevolucionProyecto(DevolucionProyecto selectedDetaDevolucionProyecto) {
        this.selectedDetaDevolucionProyecto = selectedDetaDevolucionProyecto;
    }
}
